package dht.routage;


import dht.data.TabBigInteger;
import dht.node.Node;

public class SmartRouter extends RoutingStrategy {
	private SimpleRouter r = new SimpleRouter();

	/**
	 * Fonction de routage qui retourne un indice dans la liste des voisins,
	 * soit l'indice du voisin le plus proche de la destination, soit un indice
	 * aleatoire. Le choix dépend d'une variable aleatoire.
	 * @param t la destination.
	 * @return l'indice dans la liste des voisins.
	 */
	public int route(TabBigInteger t) {
		
		synchronized(Node.myContext){
			
			double b = Math.random();
			
			if(b < 0.2){
				
				int b2 = (int)(Math.random() * Node.myContext.getVoisinage().size());
				
				while(Node.myContext.getVoisinage().get(b2).size() == 0){
					b2 = (int)(Math.random() * Node.myContext.getVoisinage().size());
				}
				
				return b2;
			}
			return r.route(t); 
		}
	}

}
